package com.equipment;

import java.util.NoSuchElementException;

import android.util.Log;

import com.util.EncodingUtil;

/**
 * B7更新车辆信息响应帧
 * @version 1.18
 * @author 刘亚东
 *
 */
public class UpdateInformationResponse {
	/**
	 * 测试 55AA070003DFB701016C
	 */
	public String toString() {
		return stx + rsctl + code + subCode + bcc + "内容：" + infoType + status;
	}

	// 帧开始标记
	private String stx = "55AA";
	// 串口帧序列号
	private String rsctl = "00";
	// 长度
	private String Length = "";
	// 代码类型
	private String code = "DF";
	// 拓展子码
	private String subCode = "B7";
	// 更新信息类型(信息类型：0为系统信息，1为车辆信息)
	private String infoType = "01";
	// 更新信息状态(0表示成功,非0表示失败)
	private String status = "00";
	// SW状态 (非9000失败 2字节)
	private String sw = "";
	// 异或校验值
	private String bcc = "69";

	/**
	 * 解析B7更新车辆信息响应帧 55AA070003DFB700016D
	 *
	 * @param context
	 * @return
	 */
	public UpdateInformationResponse analysis(String context)
			throws NoSuchElementException {
		UpdateInformationResponse ur = null;
		try {// 55AA080005DFB700009000F5
			// 判断是否是B7指令
			if (!context.substring(12, 14).toUpperCase().equals("B7")) {

				throw new NoSuchElementException("更新"
						+ (context.substring(14, 16).equals("00") ? "系统信息"
						: "车辆信息") + "错误!");
			}
			// 判断状态
			if (!context.substring(14, 16).equals("00")) {
				Log.e("错误代码：",
						context.substring(context.length() - 6,
								context.length() - 2));
				throw new NoSuchElementException("更新"
						+ (context.substring(14, 16).equals("00") ? "系统信息"
						: "车辆信息") + "错误!");
			}
			// 截取到bcc校验值 需要判断校验是否相等
			bcc = context.substring(context.length() - 2).toUpperCase();
			// 截取到发送的数据(总长度-2个字节计算到数据的最后位置)并转换下FE和FF
			String str = context.substring(4, context.length() - 2);
			// 得到比对校验
			str = EncodingUtil.yihuo(EncodingUtil.change(str)).toUpperCase();
			// 判断校验是否一致
			if (!str.equals(bcc)) {
				throw new NoSuchElementException("更新"
						+ (context.substring(14, 16).equals("00") ? "系统信息"
						: "车辆信息") + "异或错误!");
			}
			// 如果没问题就new 对象 把解析的值放入对象
			ur = new UpdateInformationResponse();
			// 解析串口帧序列号
			rsctl = context.substring(4, 6);
			ur.setRsctl(rsctl);
			// 解析长度
			Length = context.substring(6, 10);
			ur.setLength(Length);
			// 解析代码类型
			code = context.substring(10, 12);
			ur.setCode(code);
			// 解析拓展子代码
			subCode = context.substring(12, 14);
			ur.setSubCode(subCode);
			// 解析更新状态
			status = context.substring(14, 16);
			ur.setStatus(status);
			// 解析更新信息类型
			infoType = context.substring(16, 18);
			ur.setInfoType(infoType);

			sw = context.substring(context.length() - 6, context.length() - 2);
			ur.setSw(sw);


		} catch (NoSuchElementException e) {
			throw new NoSuchElementException(e.getMessage());
		} catch (Exception e) {
			throw new NoSuchElementException(e.getMessage());
		}
		return ur;
	}

	public String getStx() {
		return stx;
	}

	public void setStx(String stx) {
		this.stx = stx;
	}

	public String getRsctl() {
		return rsctl;
	}

	public void setRsctl(String rsctl) {
		this.rsctl = rsctl;
	}

	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}

	public String getSubCode() {
		return subCode;
	}

	public void setSubCode(String subCode) {
		this.subCode = subCode;
	}

	public String getInfoType() {
		return infoType;
	}

	public void setInfoType(String infoType) {
		this.infoType = infoType;
	}

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	public String getBcc() {
		return bcc;
	}

	public void setBcc(String bcc) {
		this.bcc = bcc;
	}

	public String getLength() {
		return Length;
	}

	public void setLength(String length) {
		Length = length;
	}

	public String getSw() {
		return sw;
	}

	public void setSw(String sw) {
		this.sw = sw;
	}

}
